﻿// 10212. 「一本通 6.4 例 4」曹冲养猪.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


using namespace std;
/*
https://loj.ac/p/10212

题目描述
自从曹冲搞定了大象以后，曹操就开始琢磨让儿子干些事业，于是派他到中原养猪场养猪，可是曹冲很不高兴，于是在工作中马马虎虎，
有一次曹操想知道母猪的数量，于是曹冲想狠狠耍曹操一把。

举个例子，假如有 16 头母猪，如果建了 3 个猪圈，剩下 1 头猪就没有地方安家了；如果建造了 5 个猪圈，但是仍然有 1 头猪没有地方去；
如果建造了 7 个猪圈，还有 2 头没有地方去。你作为曹总的私人秘书理所当然要将准确的猪数报给曹总，你该怎么办？

输入格式
第一行包含一个整数 n，表示建立猪圈的次数；

接下来 n 行，每行两个整数 a_i, b_i，表示建立了 a_i 个猪圈，有 b_i 头猪没有去处。你可以假定 a_i,a_j 互质。

输出格式
输出仅包含一个正整数，即为曹冲至少养猪的数目。

3
3 1
5 1
7 2


16

数据范围与提示
对于全部数据，1<= n<= 10,1<= b_i<= a_i<= 1000。
*/

typedef long long ll;

int n;
const int N = 20;
ll M = 1, m[N], b[N], t[N];



void exgcd(ll a, ll b, ll& x, ll& y)
{
	if (!b) x = 1, y = 0;
	else
	{
		exgcd(b, a % b, y, x);
		y -= a / b * x;
	}
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> m[i] >> b[i];
		M *= m[i];
	}
	ll res = 0;
	for (int i = 0; i < n; i++) {
		ll mm = M / m[i];
		ll x = 0;
		exgcd(mm, m[i], t[i], x);
		res += b[i] * t[i] * mm;
	}
	cout << (res % M + M) % M << endl;
	return 0;
}

